package me.firstapp.service.bbs;

import java.util.Date;
import java.util.List;
import java.util.Map;

import me.firstapp.common.utils.Page;
import me.firstapp.module.bbs.Topic;

public interface TopicService {

	/**
	 * 新增话题
	 * 
	 * @param memberId
	 *            用户id(必传)
	 * @param sectionId
	 *            板块id(必传)
	 * @param title
	 *            标题(必传)
	 * @param summary
	 *            摘要(必传)
	 * @param content
	 *            内容
	 */
	Topic addTopic(Long memberId, Long sectionId, String title, String summary, String content, Long apiClientId);

	/**
	 * 分页查询话题
	 * 
	 * @param pageIndex
	 *            页码(必传)
	 * @param pageSize
	 *            页容量(必传)
	 * @param sectionId
	 *            板块id(非必传)
	 */
	Page<Topic> findTopicsPage(Integer pageNo, Integer pageSize, Long sectionId, Long memberId, Integer recommend,
			String sortParam, String sortType, Long apiClientId);

	/**
	 * 根据id查询话题
	 * 
	 * @param topicId
	 *            话题id (必传)
	 */
	Topic findTopicById(Long topicId, Long apiClientId);

	/**
	 * 根据话题标题查询话题
	 * 
	 * @param title
	 *            话题标题 (必传)
	 */
	Topic findTopicByTitle(String title, Long apiClientId);

	/**
	 * 查询用户帖子量
	 * 
	 * @param memberId
	 */
	Long findTopicsCountsByMemberId(Long memberId, Long apiClientId);

	Long findTopicsCountsBySectionId(Long sectionId, Long apiClientId);

	/**
	 * 获取一定数量的话题
	 * 
	 * @param memberId
	 *            用户id
	 * @param sectionId
	 *            板块id
	 * @param counts
	 *            数量
	 */
	List<Topic> findSomeTopics(Long memberId, Long sectionId, Integer counts, Long apiClientId);

	Page<Topic> findTopicsPageByParams(Integer pageNo, Integer pageSize, Map<String, Object> searchParams,
			String sortParam, String sortType, Date startTime, Date endTime, Long apiClientId);

	/**
	 * 删除
	 * 
	 * @param ids
	 *            多个id时用","隔开
	 */
	void deleteTopics(String ids, Long apiClientId);

	/**
	 * 更新话题
	 * 
	 * @param topicId
	 *            话题id
	 * @param summary
	 *            话题摘要
	 * @param content
	 *            话题内容
	 * @param upCounts
	 *            点赞数
	 * @param viewCounts
	 *            浏览数
	 * @param replyCounts
	 *            回复数
	 * @param collectCounts
	 *            收藏数
	 * @param recommend
	 *            推荐标志
	 * @param apiClientId
	 *            api客户id
	 */
	Topic updateTopic(Long topicId, String summary, String content, Long upCounts, Long viewCounts, Long replyCounts,
			Long collectCounts, Integer recommend, Long apiClientId);
}
